package sy5_Structural_Pattern.adapter.classAdapter;
/*
 * 角色1：适配者Adaptee
 * 角色2：目标接口Target
 * 角色3：适配器类Adapter，继承Adaptee，同时实现Target
 * 类适配器与对象类适配器的区别：
 *   （1）使用对象类适配器时，适配器类聚合了被适配器类。
 *   （2）类适配器使用继承方式（同时实现了目标接口）。由于Java只支持单继承，因此，Target只能是接口，类适配器有一定的局限性。
 *   （3）相对而言，对象适配器比类适配器用的更多。
 */

class Adaptee {  //角色1：适配者类
    public void specificRequest() {
        System.out.println("使用适配者功能...");
    }
}
interface Target {  //角色2：目标接口
    public void request();
}
class Adapter extends Adaptee implements Target { //角色3：适配器类：类继承+实现目标接口
	@Override
	public void request() { //实现接口方法
		//调用基类方法
		super.specificRequest(); //super表示父类对象
	}
}
public class Client { //客户端
	public static void main(String[] args) {
		//Client关联Target，客户端面向抽象编程
		Target adapter = new Adapter();  //可以选择不同类型的适配器
		adapter.request(); // 调用接口方法
	}
}

//不定义接口Target，也是可以实现复用的，但不便于选择不同的适配器
/*class Adaptee {  
    public void specificRequest() {
        System.out.println("使用适配者功能...");
    }
}
class Adapter extends Adaptee { 
	public void request() { //定义目标方法
		//调用基类方法
		super.specificRequest(); //super表示父类对象
	}
}
public class Client { //客户端
	public static void main(String[] args) {
		//Client关联Adapter
		Adapter adapter = new Adapter();  
		adapter.request(); 
	}
}*/

